#ifndef CARTE_H
#define CARTE_H
#include <stdbool.h>

/**
    @brief carte.h permet d'initialiser les cartes, le jeu et permet la distribution des cartes aux 4 joueurs
*/

typedef struct {
        bool atout;
        char valeur;
        char couleur;
        int nb_points;
        int numero;
}Carte;

/**
    @brief Initialise une carte du jeu
    @param [in,out] ca
    @return none
*/
void caInit(Carte* ca, char valeur,char couleur,int numero);


/**
    @brief recupere les 32 carte dans un fichier texte
    @param [in,out] jeux
    @param [in] filename
    @return none
*/
void caInit_Jeux_fichier(char* jeux, const char filename[]);



/**
    @brief Initialise le jeu de 32 cartes dont on a besoin pouyr jouer
    @param [in,out] jeux
    @param [in] jeux_fichier
    @return none
*/
void caInit_Jeu(char jeux_fichier[64], Carte* jeux);


/**
    @brief Distribue le jeu de 32 cartes au 4 joueurs
    @param [in,out] main_joueur1
    @param [in,out] main_joueur2
    @param [in,out] main_joueur3
    @param [in,out] main_joueur4
    @param [in] jeux_carte
    @return none
*/
void caDistribution(Carte jeux_carte[32], Carte* main_joueur1, Carte* main_joueur2, Carte* main_joueur3, Carte* main_joueur4);

/**
    @brief Distribue aleatoirement le jeu de 32 cartes au 4 joueurs
    @param [in,out] main_joueur1
    @param [in,out] main_joueur2
    @param [in,out] main_joueur3
    @param [in,out] main_joueur4
    @param [in] jeux_carte
    @return none
*/
void caPremiere_Distribution(Carte jeux_carte[32], Carte* main_joueur1, Carte* main_joueur2, Carte* main_joueur3, Carte* main_joueur4);

/**
    @brief tri la main du joueur par couleur et par valeur
    @param [in,out] main
    @return none
*/
void caTri_Main(Carte* main);
/* tri par numero (simple) */
/**
    @brief tri la main du joueur par numero
    @param [in,out] main
    @return none
*/
void caTri(Carte* main);

/**
    @brief cherche quand le joueur doit couper ou non
    @param [in,out] jeux
    @return none
*/
void caCoupe(Carte* jeux);

/**
    @brief cherche quand le joueur doit redonner
    @param [in,out] main_joueur1
    @param [in,out] main_joueur2
    @param [in,out] main_joueur3
    @param [in,out] main_joueur4
    @return none
*/
void caRedonne(Carte* main_joueur1, Carte* main_joueur2, Carte* main_joueur3, Carte* main_joueur4);

/**
    @brief cherche quand le joueur doit utiliser un atout
    @param [in,out] tab_carte
    @param [in] couleur
    @return none
*/
void caAtout(Carte* tab_carte,char couleur);

#endif
